package cn.iocoder.yudao.module.vos.service.secretaccountproductprice;

import cn.hutool.core.collection.CollUtil;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import org.springframework.validation.annotation.Validated;
import org.springframework.transaction.annotation.Transactional;

import java.util.*;
import cn.iocoder.yudao.module.vos.controller.admin.secretaccountproductprice.vo.*;
import cn.iocoder.yudao.module.vos.dal.dataobject.secretaccountproductprice.SecretAccountProductPriceDO;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.common.pojo.PageParam;
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;

import cn.iocoder.yudao.module.vos.dal.mysql.secretaccountproductprice.SecretAccountProductPriceMapper;

import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertList;
import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.diffList;
import static cn.iocoder.yudao.module.vos.enums.ErrorCodeConstants.*;

/**
 * 全局产品定价（产品权限唯一 → 价格） Service 实现类
 *
 * @author shijun
 */
@Service
@Validated
public class SecretAccountProductPriceServiceImpl implements SecretAccountProductPriceService {

    @Resource
    private SecretAccountProductPriceMapper secretAccountProductPriceMapper;

    @Override
    public String createSecretAccountProductPrice(SecretAccountProductPriceSaveReqVO createReqVO) {
        // 插入
        SecretAccountProductPriceDO secretAccountProductPrice = BeanUtils.toBean(createReqVO, SecretAccountProductPriceDO.class);
        secretAccountProductPriceMapper.insert(secretAccountProductPrice);

        // 返回
        return secretAccountProductPrice.getProductPermission();
    }

    @Override
    public void updateSecretAccountProductPrice(SecretAccountProductPriceSaveReqVO updateReqVO) {
        // 校验存在
        validateSecretAccountProductPriceExists(updateReqVO.getProductPermission());
        // 更新
        SecretAccountProductPriceDO updateObj = BeanUtils.toBean(updateReqVO, SecretAccountProductPriceDO.class);
        secretAccountProductPriceMapper.updateById(updateObj);
    }

    @Override
    public void deleteSecretAccountProductPrice(String id) {
        // 校验存在
        validateSecretAccountProductPriceExists(id);
        // 删除
        secretAccountProductPriceMapper.deleteById(id);
    }

    @Override
        public void deleteSecretAccountProductPriceListByIds(List<String> ids) {
        // 删除
        secretAccountProductPriceMapper.deleteByIds(ids);
        }


    private void validateSecretAccountProductPriceExists(String id) {
        if (secretAccountProductPriceMapper.selectById(id) == null) {
            throw exception(SECRET_ACCOUNT_PRODUCT_PRICE_NOT_EXISTS);
        }
    }

    @Override
    public SecretAccountProductPriceDO getSecretAccountProductPrice(String id) {
        return secretAccountProductPriceMapper.selectById(id);
    }

    @Override
    public PageResult<SecretAccountProductPriceDO> getSecretAccountProductPricePage(SecretAccountProductPricePageReqVO pageReqVO) {
        return secretAccountProductPriceMapper.selectPage(pageReqVO);
    }

}